package IOLearn;


import org.junit.jupiter.api.Test;

import java.io.*;

/**
 * @author Lenl
 * @version v1.0
 * @create 2021-06-05 23:01
 * @description
 *
 * 测试FileInputStream和FileOutputStream的使用
 *  结论：
 *      1.对于文本文件(.txt,.java,.c,.cpp),使用字符流处理
 *          //不读文本的话，可以用InputStream复制
 *      2.非文本文件(.jpg .docx等)，使用字节流处理
 *
 */
public class FileStreamTest {
    @Test
    public void testFileInputStream(){
        FileInputStream fis=null;

        //造文件
        File file=new File("hello1.txt");

        try {
            //造流
            fis=new FileInputStream(file);
            //读数据  读取汉字时易出现乱码
            byte[] buffer=new byte[10];
            int len;
            while ((len=fis.read(buffer))!=-1){
                String str=new String(buffer,0,len);
                System.out.print(str); //此处的System.out.print 用的是打印流
            }
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            if(fis!=null) {
                try {
                    fis.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }


    }

    /**
     * 实现对图片的复制
     */
    @Test
    public void testFileInputOutStream(){
        FileInputStream fis=null;
        FileOutputStream fos=null;

        try {
            File filesrc=new File("D:\\Java Learn\\IOLearnTestFile\\king exit\\提亚拉的破邪双瞳.jpg");
            File filedest=new File("D:\\Java Learn\\IOLearnTestFile\\picturetest\\提亚拉的破邪双瞳.jpg");
            fis=new FileInputStream(filesrc);
            fos=new FileOutputStream(filedest);
            byte[] buffer=new byte[100];
            int len;
            while((len=fis.read(buffer))!=-1){
                fos.write(buffer,0,len);
            }
            System.out.println("复制完成！");
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if(fis!=null) {
                try {
                    fis.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if(fos!=null) {
                try {
                    fos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

    }

    //指定路径下文件的复制
   // @Test
    public void copyFile(String srcPath,String destPath){
        FileInputStream fis=null;
        FileOutputStream fos=null;

        try {
            File filesrc=new File(srcPath);
            File filedest=new File(destPath);
            fis=new FileInputStream(filesrc);
            fos=new FileOutputStream(filedest);
            byte[] buffer=new byte[512];
            int len;
            while((len=fis.read(buffer))!=-1){
                fos.write(buffer,0,len);
            }
            System.out.println("复制完成！");
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if(fis!=null) {
                try {
                    fis.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if(fos!=null) {
                try {
                    fos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    @Test
    public void testCopyFile(){

        String drc="D:\\大四相关文件\\音视频\\2021052917信管节目视频.mp4";
        String dest="D:\\Java Learn\\IOLearnTestFile\\videotest\\视频测试1.mp4";
        long start =System.currentTimeMillis();
        copyFile(drc,dest);
        long end=System.currentTimeMillis();
        System.out.println("复制完成，耗时"+(end-start)+"毫秒。");//6504ms
    }
}
